from PySide6.QtGui import Qt
from PySide6.QtWidgets import QGraphicsWidget, QGraphicsLinearLayout, QSizePolicy

from 程序核心代码.mvvm重构.基础定义.基础图形项.基础图形组件.子组件.组件包装 import 包装用容器
from 程序核心代码.mvvm重构.基础定义.基础图形项.节点接口.连接点 import 连接点
from 程序核心代码.mvvm重构.基础定义.基础图形项.节点接口.连接点文本 import 连接点文本

调试模式 = False


class 接口图形项(QGraphicsWidget):
    def __init__(self, 接口模型):
        super().__init__()
        self.接口模型 = 接口模型
        if self.接口模型.接口名称 is not None:
            文本内容 = self.接口模型.接口名称
            if self.接口模型.数据类型 is not None:
                文本内容 = self.接口模型.接口名称 + ":" + self.接口模型.数据类型
        elif self.接口模型.数据类型 is not None:
            文本内容 = self.接口模型.数据类型
        else:
            文本内容 = self.接口模型.流类型

        self.连接点包装 = 包装用容器()
        self.文本包装 = 包装用容器()
        self.连接点 = 连接点(self.接口模型, 父项=self.连接点包装)
        self.文本 = 连接点文本(self.接口模型.方向, 文本内容, 父项=self.文本包装)
        self.连接点包装.setMaximumSize(10, self.文本.boundingRect().height())
        self.文本包装.setMaximumHeight(self.文本.boundingRect().height())
        self.接口布局 = QGraphicsLinearLayout(Qt.Horizontal)  # 水平线性布局
        self.接口布局.setContentsMargins(0, 0, 0, 0)  # 内边距为0
        self.接口布局.setSpacing(0)  # 控件间距为0
        self.setLayout(self.接口布局)  # 设置布局
        # 根据方向添加项
        if self.接口模型.方向 == "输入":
            # 添加连接点包装，不占伸缩
            self.接口布局.addItem(self.连接点包装)
            self.接口布局.addItem(self.文本包装)
        else:  # 输出方向
            self.接口布局.addItem(self.文本包装)
            self.接口布局.addItem(self.连接点包装)
            # 调整连接点位置  他的位置x应该为self.连接点包装 的宽度  高应该为 起始接口.文本的高度的一半
        #起始接口.接口布局.setStretchFactor(起始接口.文本包装, 1)
        self.文本包装.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)  # 宽 自动扩展 高 固定
        self.连接点包装.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)  # 宽 固定 高 固定
        self.接口布局.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)  # 宽 自动扩展 高 固定
        self.接口模型.图形项注册信号.emit(self)  # 注册图形项

    def update(self, rect=None):
        super().update(rect)
        self.连接点.update()
    def resizeEvent(self, event):
        super().resizeEvent(event)
        if self.接口模型.方向 == "输入":
            # 连接点在左边，x为-10
            self.连接点.setPos(-10, self.文本.boundingRect().height() / 2)
        else:
            # 连接点在右边，x为文本包装的宽度
            self.连接点.setPos(18, self.文本.boundingRect().height() / 2)
        self.连接点.连接线刷新()
